﻿// 10000 活动安排.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;

/*
https://loj.ac/p/10000

题目描述
设有 n 个活动的集合 E={1,2,..,n}，其中每个活动都要求使用同一资源，如演讲会场等，而在同一时间内只有一个活动能使用这一资源。
每个活动 i 都有一个要求使用该资源的起始时间 s_i 和一个结束时间 f_i，且 s_i<f_i。如果选择了活动 i ，则它在时间区间 [s_i,f_i) 内占用资源。
若区间 [s_i,f_i) 与区间 [s_j,f_j) 不相交，则称活动 i 与活动 j 是相容的。
也就是说，当 f_i <=  s_j 或 f_j <= s_i 时，活动 i 与活动 j 相容。选择出由互相兼容的活动组成的最大集合。

输入格式
第一行一个整数 n；

接下来的 n 行，每行两个整数 s_i 和 f_i。

1<=n<=1000

输出格式
输出互相兼容的最大活动个数。

样例
4
1 3
4 6
2 5
1 7

2
*/

const int N = 1010;
pair<int, int> a[N];
int n;


bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
	return a.second < b.second;
}


void solve() {
	sort(a,a+n,cmp);
	int ans = 0; int curr = -9999999;
	for (int i = 0; i < n; i++) {
		if (a[i].first >= curr) {
			ans++; curr = a[i].second;
		}
	}

	cout << ans << endl;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		int j, k; cin >> j >> k;
		a[i] = { j,k };
	}

	solve();

	return 0;
}

 